package main

import "fmt"

/**
go函数不支持：嵌套， 重载和默认参数
支持以下特性：
   无需声明函数
   不定长度变参
   多返回值
   命名返回值参数
   匿名函数
   闭包
 */

func A(a int, b string) (int, string, int) {
	if a > 5{
		fmt.Println(b)
	}
	return 1, "a", 3
}

//不定长变参,必须把不定长变参放到最后
//而且虽然参数的形式是一个slice，但是参数传递是一个值拷贝而不是引用

func B(a ...int)  {
	fmt.Println(a)
}

//如果直接传递slice则为引用类型
func C(s []int)  {
	s[0] = 12
	s[1] = 13
	fmt.Println(s)
}

//指针类型参数,引用类型传递
func D(a *int)  {
	*a = 3
	fmt.Println(*a)
}

func main() {
	B(1,2,3)
	s := []int{1,2,3}
	C(s)
	fmt.Println(s)

	a := 1
	D(&a)
	fmt.Println(a)
}